<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <link type="text/css" rel="stylesheet" href="styles.css">
  <script type="text/javascript" src="config.js"></script>
</head>

<body>
  <h1 class="h">7. 进阶操作</h1>
  <dl>
    <dt>1. 布尔索引（用条件来筛选数据）</dt>
    <dd>
      这是数据清洗和筛选的利器！
      <pre><code>arr = np.arange(1, 13).reshape(3, 4)
print(arr)
# [[ 1  2  3  4]
#  [ 5  6  7  8]
#  [ 9 10 11 12]]

# 创建一个布尔数组，判断哪些元素大于5
bool_arr = arr &gt; 5
print(bool_arr)
# [[False False False False]
#  [False  True  True  True]
#  [True  True  True  True]]

# 利用这个布尔数组作为索引，可以取出所有大于5的值
print(arr[bool_arr])  # 或者直接写 arr[arr &gt; 5]
# 输出：[6 7 8 9 10 11 12]

# 可以组合多个条件
# “&” 表示“与”， “|” 表示“或”， “~” 表示“非”
print(arr[(arr &gt; 5) & (arr &lt; 10)]) # 找出大于5且小于10的数。输出：[6 7 8 9]</code></pre>
    </dd>
    <dt>2. 矩阵乘法</dt>
    <dd>
      前面用的 * 是对应位置相乘。真正的矩阵乘法要用 @ 运算符或 dot() 函数。
      <pre><code>a = np.array([[1, 2],
              [3, 4]])
b = np.array([[5, 6],
              [7, 8]])

# 对应位置相乘
print(a * b)
# [[ 5 12]
#  [21 32]]

# 矩阵乘法 (第1个矩阵的行 点乘 第2个矩阵的列)
print(a @ b)
# 1*5+2*7=19, 1*6+2*8=22
# 3*5+4*7=43, 3*6+4*8=50
# [[19 22]
#  [43 50]]

print(np.dot(a, b)) # 和 a @ b 结果一样</code></pre>
    </dd>
  </dl>
</body>

</html>